package net.schastny.shopmanager.dao;

import java.util.List;

import net.schastny.shopmanager.domain.Shop;
import net.schastny.shopmanager.dao.ShopDAO;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

/* Repository - Аннотация показывает, что класс функционирует как репозиторий и 
 * требует наличия прозрачной трансляции исключений. Преимуществом трансляции 
 * исключений является то, что слой сервиса будет иметь дело с общей иерархией 
 * исключений от Спринга (DataAccessException) вне зависимости от используемых 
 * технологий доступа к данным в DAO слое.
 */

@Repository
public class ShopDAOImpl implements ShopDAO {
	/*Аннотация позволяет автоматически установить значение поля SessionFactory.
	 */
	@Autowired
	private SessionFactory sessionFactory;
	
	public void addShop(Shop shop) {
		// TODO Auto-generated method stub
		sessionFactory.getCurrentSession().save(shop);
	}
	
	@SuppressWarnings("unchecked")
	public List<Shop> listShop() {
		// TODO Auto-generated method stub
		return sessionFactory.getCurrentSession().createQuery("from Shop")
	            .list();
	}

	public void removeShop(Integer id) {
		// TODO Auto-generated method stub
		Shop shop = (Shop) sessionFactory.getCurrentSession().load(
                Shop.class, id);
        if (null != shop) {
            sessionFactory.getCurrentSession().delete(shop);
        }
	}

}
